数据链路层的功能
三个基本功能
- 封装成帧
- 透明传输
- 差错控制
使用的两种信道
- 点对点 -> (网线)一对一通信, 专用物理链路
- 广播 -> 一对多通信, 逻辑上为总线结构
一些概念
- 链路
- 数据链路 -> 物理链路上添加通信协议的软硬件后形成的逻辑通信通道
- 帧 -> 数据链路层对应协议数据单元,PDU
链路管理
数据链路层连接的建立,维持和释放的过程, 主要是用于面向连接的服务
- 通信双方必须首先确认对方处于就绪状态, 交换必要信息(初始化帧序号), 才能建立连接; 通信时维持, 通信完成后释放
封装成帧
- 帧 -> 包括<首部|数据|尾部> -> <标志|地址|控制|数据|帧检验序列|标志>
透明传输
- 即使数据中出现与帧定界符相同的比特组合, 也不会误判为帧边界
- 网络层感知不到底层的帧封装过程 -> 数据链路层对上层是透明的
流量控制
- 在OSI模型中由数据链路层实现, 调节节点到节点之间的流量; 在TCP/IP模型中由传输层实现, 负责端到端的流量控制
- 限制发送方的发送频率, 不超过接收方的接收能力
- 通常依赖反馈机制 -> 发送方根据接收方的确认或窗口信息
差错控制和可靠传输
- 两类错误 -> 位错(下一节), 帧错(帧丢失,重复,失序等, 属于更高层的传输差错)
- 早期OSI模型认为数据链路层必须向上提供可靠传输服务 -> 帧编号,确认和重传机制, 接收方检查后需要发送确认, 发送方未收到则重传
- 通信质量较差/无线链路 -> 确认和重传机制 -> 可靠服务
- 高质量的有线链路 -> 仅CRC检错, 直接丢弃出错帧, 不再负责重传, 只确保上交的帧无差错
组帧
目的 -> 一旦出错, 只需发送出错的帧, 不必重传全部数据
- 组帧同时有首部和尾部, 接收方必须能准确识别一帧在比特流中的起始与结束位置
字符计数法
- 只有首部 -> 记录包含该首部的总字节数
- 主要缺陷 -> 如果首部出错…
字节填充法
- SOH(首部),EOT(尾部)与ESC转移字符
零比特填充法
- 首部尾部包含6个连续的1(01111110)
- 数据中采用扫描, 每有5个连续的1就添加0, 实现了差异化
- HDLC和PPP
违规编码法
- 无须填充技术即可实现透明传输, 但仅适用于冗余编码 -> (这种方法依赖物理层编码存在”非法/无效”码型, 只有像曼彻斯特编码这种自带冗余的线路编码才能腾出违规码用作帧边界)
- 适用于不采用高低电平的编码方法(曼彻斯特和差分曼彻斯特等)
组帧方法解决的是”数据中出现定界符时如何避免误判”; 定界符在信道中被噪声破坏导致的帧丢失/错位, 则由 CRC 检错 + 确认重传机制来兜底.